/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ControleAcademico.View;

import ControleAcademico.Model.Dao.AtividadeDaoImp;
import ControleAcademico.Model.Dao.HistoricoAtividadesImp;
import ControleAcademico.Model.Pojo.Aluno;
import ControleAcademico.Model.Pojo.Atividade;
import ControleAcademico.Model.Pojo.HistoricoAtividades;
import ControleAcademico.Model.Pojo.Professor;
import ControleAcademico.Model.Pojo.Turma;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 *
 * @author arthur
 * @author renan
 * @author tais
 * @author vinicius
 */
public class MenuAtividade {
    
    // Atributos
    private AtividadeDaoImp atividadeDao;
    private HistoricoAtividadesImp historicoAtividades;
    
    // Metodos  
    
    public AtividadeDaoImp getAtividadeDao(){return this.atividadeDao;}
    
    public MenuAtividade(){
        
      
    }
    
    public void criaListaVazia() {
        this.atividadeDao = new AtividadeDaoImp();
    }
    

    public void criarAtividade(MenuTurma menuTurma, MenuProfessor menuProfessor){
        
        System.out.println("Qual professor você é? (ID):");
        for(Professor a : menuProfessor.getProfessorDao().obterLista()) {
            System.out.println(a.toString());
        }
        
        int professorId = Console.readInteger();
        int index = professorId - 1;
        
        Professor professor = menuProfessor.getProfessorDao().obterLista().get(index);
        
        System.out.println("Informe o ID da turma: \n");
        
        for(Turma a : menuProfessor.getProfessorDao().obterLista().get(index).getListaTurmas()) {
            System.out.println(a.toString());
        }
        
        int turmaId = Console.readInteger();
        
        index = turmaId - 1;
        
        Turma turma = menuTurma.getTurmaDao().obterLista().get(index);
        
        System.out.println("Informe o nome da atividade: \n");
        String nome = Console.readString();
        System.out.println("Informe o tipo da atividade: \n");
        String tipo = Console.readString();      
        System.out.println("Informe a data de entrega: \n");
        String data = Console.readString();
        Calendar calendarData = new GregorianCalendar();
        
        try {
            SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
            calendarData = Calendar.getInstance();
            calendarData.setTime(formatoData.parse(data));
        }catch (ParseException e) {
            System.out.println("Exception : "+e);
        }
        
        System.out.println("Informe o valor da atividade: \n");
        double valor = Console.readDouble(); 
        
        int id = this.atividadeDao.obterLista().size() + 1;
        
        Atividade atividade = new Atividade(nome,tipo,calendarData,valor,turma,professor,id);
        
        try {
            this.atividadeDao.adicionar(atividade);

        } catch (IOException ex) {
            System.out.println("Atividade não inserida.\nAtividade já consta na lista.");
        }
        
    }
    
    public void lancarNota(MenuAluno menuAluno, MenuProfessor menuProfessor, MenuHistoricoAtividades menuHistAtividades) {

        
        System.out.println("Qual professor você é?");
        for (Professor a : menuProfessor.getProfessorDao().obterLista()) {
            System.out.println(a.toString());
        }
        int professorId = Console.readInteger();
        Professor professorEncontrado = null;
        
        try {
            professorEncontrado = menuProfessor.getProfessorDao().buscar(professorId);
        } catch (IOException e) {
            System.out.println("Professor não encontrado.");
            return;
        }        
    
        System.out.println("Informe o id do aluno");
        for (Aluno a : menuAluno.getAlunoDao().obterLista()) {
            System.out.println(a.toString());
        }
        int alunoId = Console.readInteger();
        Aluno alunoEncontrado = null;
        
        try {
            alunoEncontrado = menuAluno.getAlunoDao().buscar(alunoId);
        } catch (IOException e) {
            System.out.println("Aluno não encontrado.");
            return;
        }        
        
        System.out.println("Informe a atividade que deseja lançar nota: \n");

        for (Atividade a : this.getAtividadeDao().obterLista()) {
            System.out.println(a.toString());
        }
        int atividadeId = Console.readInteger();
        Atividade atividadeEncontrada = null;
        
        try {
            atividadeEncontrada = this.getAtividadeDao().buscar(atividadeId);
        } catch (IOException e) {
            System.out.println("Aluno não encontrado.");
            return;
        }         
        
        
        System.out.println("Informe a nota do aluno: \n");
        double nota = Console.readDouble(); 
        
        int id = this.historicoAtividades.obterLista().size() + 1;
        
        try {
            HistoricoAtividades novoHistorico = new HistoricoAtividades(alunoEncontrado,atividadeEncontrada,nota,id);
            this.historicoAtividades.adicionar(novoHistorico);
            menuHistAtividades.getHistoricoAtividadesDao().adicionar(novoHistorico);
        } catch (IOException e){
            System.out.println("Erro na criação do histórico de atividade..");
        }
    }
    
    public void salvar(MenuTurma menuTurma) {
        
        try {
            File arquivo;  
  
            arquivo = new File("Atividades.txt");  
            FileOutputStream fos = new FileOutputStream(arquivo);
            
            fos.write(("Id\tNome\tTipo\tData\tValor\tProfessor(ID)\n\tTurma").getBytes());
            
            for (Atividade a : getAtividadeDao().obterLista()) {
                
                
                SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
                Calendar dia = new GregorianCalendar();
                String data = formatoData.format(a.getdata().getTime());

                String escrita = (a.getId() + "\t" + a.getNome() + "\t" + a.getTipo() 
                        + "\t" + data+ "\t" + a.getValor() + "\n" 
                        + a.getElaborador().getId() + a.getTurma().getId() + "\t"); 
                
                fos.write(escrita.getBytes());
            }
            
            fos.close();

        }catch (Exception ee) {  
            System.out.println(ee);
        }
    
    }
    
        public void load(MenuProfessor menuProfessor, MenuTurma menuTurma) {
        
        try {
            
            File entrada = new File("Atividades.txt");
            InputStream leituraEntrada = new  FileInputStream(entrada);
            InputStreamReader leituraStream = new InputStreamReader(leituraEntrada);  
            BufferedReader leituraBuffer = new BufferedReader(leituraStream);

            String linha = leituraBuffer.readLine();
            this.criaListaVazia();
     
            while(linha!= null) {
                String s[] = linha.split("\\t");
                
                
                Calendar cal;
                try {  String str_date= s[3];
                    DateFormat formatter; 
                    Date date; 
                    formatter = new SimpleDateFormat("dd/MM/yyyy");
                    date = (Date)formatter.parse(str_date); 
                    cal=Calendar.getInstance();
                    cal.setTime(date);
                 } catch (ParseException e) {
                    System.out.println("Exception :"+e);
                    return;
                 }
                  
                 // Encontra a turma
                 Turma turma = null; 
                 try {
                    turma = menuTurma.getTurmaDao().buscar(Integer.parseInt(s[7]));
                 } catch (IOException e) {
                    System.out.println("Turma não encontrada.");
                    return;
                 }   
                 
                 // Encontra o professor
                 Professor professor = null; 
                 try {
                    professor = menuProfessor.getProfessorDao().buscar(Integer.parseInt(s[6]));
                 } catch (IOException e) {
                    System.out.println("Professor não encontrado.");
                    return;
                 }   
                 
                Atividade novaAtividade = new Atividade(s[1],s[2],cal,Double.parseDouble(s[0]),
                        turma,professor, Integer.parseInt(s[0]));
                
                this.getAtividadeDao().adicionar(novaAtividade);
                linha = leituraBuffer.readLine();
            }


            leituraBuffer.close();
            leituraStream.close();
            leituraEntrada.close();
  
        }catch (Exception ee) {  
            System.out.println("Erro na leitura do arquivo.");
            ee.printStackTrace();  
        }
    }
    
}
